home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok24.lha / Clusters / Clusters.dok < prev    next >
Text File  |  1993-08-15  |  6KB  |  130 lines

  1. ======================================================================
  2. Dokumentation zu "Clusters" Version 1.1
  3. Autor: Nicolas Benezan, Postwiesenstr. 2, D7000 Stuttgart 60
  4. ======================================================================
  5.  
  6. Kopierrecht
  7. ­­­­­­­­­­­
  8. Das komplette Packet (Quelltext, Dokumentation und Objectcode) ist
  9. Public Domain Software. Es darf beliebig kopiert und verbreitet werden
  10. solange...
  11.  
  12. * mein Name und dieser Kopierrechtshinweis erhalten bleiben,
  13. * die Vollständigkeit des ganzen Packets gewährleistet ist, und
  14. * mit dem Vertrieb dieser Software kein Gewinn erwirtschaftet wird.
  15.  
  16. Die Kommerzielle Nutzung ohne meine ausdrückliche schriftliche
  17. Genehmigung ist untersagt.
  18. Ferner ist allen Personen, die in irgend einer Weise etwas mit "Data
  19. Becker" zu tun haben, insbesondere für "Data Becker" arbeiten oder
  20. deren Produkte verkaufen, jegliche Verwendung dieser Software verboten.
  21.  
  22. Verbesserungsvorschläge sind stets willkommen. Falls Sie Veränderungen
  23. am Programm vornehmen, dokumentieren Sie diese bitte gut verständlich.
  24. Es würde mich freuen, wenn Sie mich über größere Veränderungen in
  25. Kenntnis setzen würden.
  26.  
  27. (c) 1988 by Nicolas Benezan.
  28.  
  29.  
  30. Übersicht
  31. ­­­­­­­­­
  32. * Umfang des Packets
  33. * Einleitung
  34. * Beschreibung der Prozeduren
  35. * Das Demomodul "ClusterTest"
  36.  
  37. Umfang des Pakets
  38. ­­­­­­­­­­­­­­­­­
  39. Das komplette Paket "Clusters" beinhaltet folgendes:
  40.  
  41. * Clusters.dok          Diese Dokumentation
  42. * Clusters.def          \
  43. * Clusters.mod           }Quelltext
  44. * ClusterTest.mod       /
  45. * Clusters.sym          \
  46. * Clusters.obj           }Objectcode
  47. * ClusterTest.obj       /
  48. * ClusterTest           Demoprogramm
  49.  
  50. (Stand 19.Aug.1989)
  51.  
  52.  
  53. Einleitung
  54. ­­­­­­­­­­
  55. Eine dynamische Speicherverwaltung wie sie es beim Amiga gibt ist etwas
  56. sehr praktisches, wenn man mit Datenstrukturen wie Listen, Bäumen usw.
  57. arbeitet. Allerdings kann es in Extremfällen (wenn man mit sehr vielen
  58. kleinen Speicherblöcken arbeitet) vorkommen, daß das Programm mehr als die
  59. Hälfte seiner Zeit allein mit der Speicherverwaltung verbringt. Da hilft
  60. dann auch der optimierteste AVL-Baum-Algorithmus nichts mehr, das Programm
  61. wird schleppend langsam. Außerdem gibt es einen weiteren unangenehmen
  62. Nebeneffekt: der Speicher unterteilt sich mit der Zeit in immer kleinere
  63. und ungleichmäßigere Abschnitte, was die Performance des ganzen Systems
  64. weiter verschlechtert.
  65. Das Modul Clusters schafft Abhilfe, indem es mehrere kleine Speichereinhei-
  66. ten zu größeren Blöcken (Cluster, engl. Traube) zusammenfasst. Erstens geht
  67. das Allozieren von Speicher (durchschnittlich) schneller, da nur bei einem
  68. Bruchteil der Allocate()-Aufrufe wirklich Speicher vom System angefordert
  69. werden muß, zweitens wird der Speicher nicht so stark zerstückelt, da nur
  70. wenige große Cluster alloziert werden (die übrigens auch bei unterschied-
  71. licher Blockgröße immer die gleiche Gesammtgröße haben).
  72.  
  73.  
  74. Beschreibung der Prozeduren
  75. ­­­­­­­­­­­­­­­­­­­­­­­­­­­
  76.  
  77. InitMemManager()
  78. ----------------
  79. Diese Prozedur muß vor allen anderen aufgerufen werden. Sie initialisiert
  80. die Parameter, mit denen die Speicherverwaltung arbeitet. Es wird je eine
  81. Prozedur angegeben, mit der das Modul Clusters intern Speicher vom System
  82. anfordert bzw. wieder freigibt. Zusätzlich wird noch die Cluster-
  83. Gesammtgröße (ClusterSize) und die Größen der einzelnen Blöcke
  84. (BlockSizes als offener Feldparameter) angegeben. Es wird empfohlen, für
  85. Clustersize möglichst eine Zweierpotenz (512, 1024 oder 2048 usw.) oder
  86. wenigstens ein ganzzahliges Vielfaches von kB zu verwenden, da hierdurch
  87. die Speicherzerstückelung am besten vermindert werden kann.
  88. BlockSizes ist ein offenes Feld der am häufigsten benötigten Blockgrößen
  89. bei Allocate(). Hierbei sollten die am meisten benötigten (die
  90. zeitkritischsten) als erste angegeben werde.
  91.  
  92. Allocate()
  93. ----------
  94. Diese Prozedur ist parameterkompatibel mit den gängigen Allocate-Prozeduren
  95. aus MemSystem, Heap usw. Die Tücke der Implementation ist nach außen
  96. unsichtbar, d.h. die Prozedur verhält sich auch genauso wie gewöhnliche
  97. Allocate-Prozeduren und kann deshalb auch als AllocProc in vielen
  98. Amok-Modulen verwendet werden (siehe z.B. Trees, Lists, AVL uvm.).
  99. Wird mit Allocate() eine Blockgröße angefordert, die im BlockSizes-Feld
  100. (von InitMemManager) enthalten war, dan wird diese auf die oben
  101. beschriebene optimierte Art behandelt. Anderernfalls wird der Block ganz
  102. normal vom systemglobalen Speichervorrat alloziert.
  103.  
  104. Deallocate()
  105. ------------
  106. Dies ist das Gegenstück zu Allocate() und dient dazu, einen mit Allocate()
  107. angeforderten Speicherblock wieder freizugeben. Es muß streng darauf
  108. geachtet werden, daß die Allocate/Deallocate-Prozeduren dieses Moduls nicht
  109. mit anderen gemischt verwendet werden, d.h. das mit Clusters.Deallocate()
  110. nur solcher Speicher freigegeben wird, der auch mit Clusters.Allocate()
  111. alloziert wurde, sonst kann es zu Abstürzen kommen.
  112.  
  113. FindBlock()
  114. -----------
  115. Diese Prozedur ermöglicht das Auffinden des Clusters, in dem sich ein
  116. bestimmter Block befindet. dabei wird auch die Nummer des Blocks innerhalb
  117. des Clusters errechnet. Der normale Benutzer braucht sich hierum nicht zu
  118. sorgen. Dies ist lediglich für spezielle Erweiterungen von Clusters
  119. vorgesehen (z.B. carbage collection), bei der Blöcke zwischen Clustern
  120. verschoben werden müssen.
  121.  
  122. Das Demomodul "ClusterTest"
  123. ---------------------------
  124. Diese Demo zeigt die interne Arbeitsweise von Clusters. Durch einen
  125. Zufallsgenerator gesteurt werden Allocate() und Deallocate() abwechselnd
  126. aufgerufen. Dabei sieht man sehr schön, wie sich die Cluster allmählich
  127. füllen, durch Deallocate()s Lücken entstehen, die dann durch folgende
  128. Allocate()s wieder gefüllt werden usw. ("·"=freier, "*"=belegter Block).
  129.  
  130.